[アップデート] EC2 Image Builder が KMS との統合により暗号化された AMI を作成・配布できるようになりました!
コンバンハ、千葉(幸)です。
EC2 Image Builder が KMS (Key Management Service) と統合し、EBS 暗号化がなされた状態の AMI を作成・配布できるようになりました!
セキュリティコンプライアンスにより AMI の暗号化が必須となっている環境において、EC2 Image Builder を導入しやすくなりましたね!
目次
EC2 Image Builder とは
マシンイメージの最新化をシンプルに実現してくれるサービスです。
サービスの詳細や各種実行手順は過去のエントリがありますのでぜひご参照ください。
EC2 Image Builder を使用することで、ベースとなる AMI からビルド用インスタンスの立ち上げ、必要な処理を行った上での新規 AMI の作成、ということができます。ここで作成できる AMI を予め暗号化することが、今回のアップデートにより可能になりました。
やってみた
マネジメントコンソールから EC2 Image Builder を実行していきます。手順の内訳は先人のエントリに任せ、サラッと触れていきます。
公式のドキュメントは以下を参照してください。
Getting started with EC2 Image Builder - EC2 Image Builder
まずは AMI の作成に関する一連の流れを定義するイメージパイプラインを作成していきます。
EC2 Image Builder の画面から、[ Create image pipeline ] を押下します。
ここでは以下の 4 ステップがあります。
- Step 1 : Define recipe
- Step 2 : Configure pipeline
- Step 3 : Configure additional settings - optional
- Step 4 : Review and create
順番に確認していきます。
Step 1 : Define recipe
まずはレシピを定義するステップです。レシピは ベースとなる AMI や、ビルドやテストを行うコンポーネントをまとめて定義したものです。
ソース AMI の指定を行います。ここで独自に定義した AMI を指定することもできますが、今回はマネージドなイメージを指定しました。
続いてストレージボリュームに関する指定を行います。先人の手順の中に含まれていなかったため、この設定項目は今回のアップデートにより追加されたものかと思います。
特に、今回のアップデートの肝となる暗号化に使用する KMS キーはここで選択することができます。ここではカスタマー管理キーもしくは AWS 管理キーをエイリアスで指定できます。今回は AWS 管理の alias/aws/ebs
を選択しました。
ビルドコンポーネント、テストコンポーネントを指定します。それぞれ、各プロセスで実施する内容を定義したドキュメントで、複数選択可能です。テストコンポーネントは省略することも可能です。
こちらのコンポーネントも AWS が提供するものとカスタマーが定義するものがあります。今回は AWS が提供するものを選択します。
これらの選択が終わったら次のステップへ進みます。
Step 2 : Configure pipeline
パイプラインを設定していきます。パイプラインは、先ほど定義したレシピを基に、ビルドやテストを実施する一連の流れに関する定義を行うものです。
パイプライン名や説明、使用する IAM ロールを設定していきます。
この IAM ロールは信頼されたエンティティとして EC2 が指定されている必要があります。ビルド用、テスト用に生成されるインスタンスにアタッチされ、各種検証を実行するために使用されます。今回は Administrator のポリシーをアタッチして試してみました。
(スクショ内のパイプライン名やロール名に誤字がありますが気にしないでください。。)
ビルドのスケジュールや、一時的に立ち上げられるインスタンスに関する設定を定義します。今回は特に明示的な設定をせずに済ませました。
設定が終わったら次のステップに進みます。
おまけ
ここで VPC の設定をきちんとしないとデフォルト VPC 内に一時的なインスタンスの作成を試みるようで、私はデフォルト VPC のサブネットを削除していたために、のちのちパイプラインを実行した際に以下のようなエラーが出ました。
No subnets found for the default VPC 'vpc-5axxxxx'. Please specify a subnet.
大人しくきちんと VPC を設定し直したテイで続きをお読みください。
Step 3 : Configure additional settings
追加設定を行うことができるステップです。
ライセンスマネージャーと統合することもできるようですね。ひとまず今回は生成される AMI の名称だけ指定しました。
EC2 Image Builder では、AMI の作成と同時に、別リージョンや別 AWS アカウントへの配布を行うこともできます。今回は特に配布の指定をせずに進みます。
次のステップへ進みます。
おまけ
配布を行う際は以下のように設定できます。
共有化できるのは、暗号化されていないボリュームと、カスタマーマネージド CMK で暗号化されたボリュームを持つ AMI のみです。
Step 4 : Review and create
ここまでのステップで設定した内容の確認と、作成を行うステップです。
今回の肝である暗号化キーについてはここで確認できます。
ステップ 2 と 3 の内容も確認し、問題なければ[ Create pipeline ] を押下します。
パイプラインのステータスが Enabled
になることを確認してください。
パイプラインの実行
パイプラインが作成された勢いそのままに、実行していきます。 [ Run pipeline ] を押下します。
パイプラインの処理プロセスに応じて、ビルド用のインスタンスが立ち上がります。レシピの定義に則り、ソースとなる AMI から立ち上がったインスタンス上で、ビルドコンポーネントで定義した処理が実行されます。
ちなみにこのビルドは AWS Systems Manager のオートメーションによって実行されているため、進捗状況をここで確認することができます。AMI の取得、ビルド用のインスタンスの削除もこのオートメーション内で実行されます。
ビルド用のインスタンスが役割を終えると削除され、そこで作成された AMI から別途テスト用のインスタンスが作成されます。
このプロセスも Systems Manager のオートメーションで実行されますが、使用するドキュメントは別物になっています。レシピにテスト用のコンポーネントを割り当てていなくても、この処理は実施されます。
(ちなみに目ざとい方は SSM ドキュメントの ARN にアカウント番号載っちゃってる!と思われたかもしれませんが、332908494474
は私の AWS アカウント番号ではありません。このドキュメントはパブリックに公開されているものです。このアカウント番号はなんなのか?なぜ所有者が Amazon でないのか?は調べても見つかりませんでした。)
これらのプロセスが完了すると、 パイプライン上で確認できるイメージのステータスが Available
に遷移します。
EC2 のコンソールに移動し、AMI が作成されていることを確認します。AMI に含まれるスナップショットに暗号化が設定されていることがわかります。
スナップショットの内訳を確認すると、暗号化済みで、KMS キーエイリアスとしてレシピで指定した aws/ebs
が指定されていることが分かります。
Image Builder により、暗号化された AMI を作成できることが確認できました!
終わりに
EC2 Image Builder で暗号化された AMI を作成できるアップデートを確認しました。
これまでは Image Builder で作成した AMI を暗号化したい場合は、 AMI のコピーを行い、コピーの際に暗号化を指定する、という処理が必要でした。その手間を減らせるのは嬉しいですね。
また、暗号化しない状態で AMI を作成する、というのが許容されないケースがあるかもしれません。そういった環境においても、Image Builder を採用できるようになりました。
KMS キーを用いて暗号化を行う際には、キーポリシーや復号化のための権限など考慮すべきポイントが増えることになりますが、お使いのケースにマッチするようでしたら採用をご検討ください。
以上、千葉(幸)がお送りしました。